NLP

Commonsense Knowledge Aware Conversation Generation with Graph Attention

本文研究的是基于大规模常识知识图谱的开放域对话系统,作者在传统的encoder-decoder模型中增加静态图注意力和动态图注意力机制。给定用户的一段输入,该模型从常识知识图谱中检索出相关的子图,进行静态图注意力编码,进而增强对用户输入的语义理解。然后在生成的过程中,模型通过动态的图注意力机制与检索出来的知识图谱以及其中的三元组进行交互。与之前的方法相比,本模型是把一个知识图谱看作一个整体,而不是单独的使用图谱中三元组。
paper link
code link

Introduction

背景知识对于很多自然语言任务至关重要,在对话生成领域,已经提出了一些方法和模型来利用常识知识[Han et al., 2015;

Ghazvininejadet al., 2017; Zhuet al., 2017],这些模型通常使用的是非结构化数据或者领域特定的三元组。因此,普遍存在以下问题:

  • 模型质量高度依赖于非结构化数据的好坏或者受限于小规模的、特定领域的知识图谱;
  • 这些模型通常分散独立地使用知识图谱的每个三元组,而不是把一个图中的所有三元组看作一个整体,很难通过实体和关系表征整体的语义信息。

为了解决上述问题,本文提出了CCM(commonsense knowledge aware conversational model)模型,促进开放域对话系统的理解与生成。模型使用的是一个大规模知识图谱[Speer and Havasi, 2012],下图是一个对比:

Figure  1:  (Better  viewed  in  color)  Two  response  examples  by  our model  (the  first  line)  and  Seq2Seq  (second)  with/without  considering  commonsense  knowledge,  respectively

本文的贡献在于:

  1. 本文首次在对话生成领域使用大规模知识图谱,进而生成更加合理和包含有用信息的对话。
  2. 本文将三元组看成图的一部分,侧重于从整体去获取图的表征,这样可以更好的解释图中相邻实体和关系的语义信息。

Commonsense Conversational Model

Background : Encoder-Decoder Framework

本部分是一个传统的encoder-decoder+attention模型,编码器负责将输入序列编码成隐层状态$h_{t}$:

$e(x_{t})$ 代表输入token $x_{t}$ 的词向量。解码器如下:

其中$c_{t-1}$为$s_{t-1}$与编码器隐层状态的注意力输出。最后是一个softmax分类层。

Task Definition and Overview

模型研究的问题定义如下:给定用户输入post $X = x_{1}x_{2}…x_{n}$ 和一些抽取得到的知识图谱 $G = (g_{1}, …,g_{N_{G}})$ ,目标是生成一个恰当回复 $Y = y_{1}…y_{m}$,即使得以下概率最大:

这些抽取的知识图谱来自于一个大的知识库,使用用户输入的每个词来做检索,一个词对应G中的一个图(对于没有匹配到的词,设定一个特殊的图_Not A Fact_)。每个图谱由一系列三元组组成:

每个三元组表示成(head entity, relation, tail entity)= (h, r, t)。本文使用TransE表示实体关系,为了减小知识图谱与无结构对话数据之间的差距,增加了MLP网络。因此,一个三元组的表示为 $\bold k = (\bold h, \bold r, \bold t) = MLP(TranE(h, r, t))$ ,(h, r, t)分别为最终得到(h, r, t)的向量表示。

本文提出的CCM整体结构如下:

Figure  2:  Overview  of  CCM

Knowledge Interpreter 模块负责将一个词的词向量和这个词对应的图谱向量表示堆叠起来,作为Encoder(GRU)的一步输入,由图转化成向量的过程是通过静态图注意力机制完成的。基于我们的动态图注意力机制,知识感知生成器 (Knowledge Aware Generator) 生成了回复。在每个解码环节,它读取检索到的图和每个图中的实体,然后在词汇表中生成通用词汇,或在知识图中生成实体。

Knowledge Interpreter

Figure  3:  Knowledge  interpreter  concatenates  a  word  vector  and  the graph  vector  of  the  corresponding  retrieved  graph.  In  this  example, word  rays  (also  key  entity)  corresponds  to  the  first  graph,  and  sunlightto  the  second  one.  Each  graph  is  represented  by  a  graph  vector. A  key  entity  is  an  entity  which  occurs  in  the  post.

在输入序列的每一个位置上,Knowledge Interpreter使用当前位置上的token作为key entity去检索整个知识图谱,得到与token相关联的一个图谱(如上图中黄色部分所示,注意一个词只能对应一个图,这个词是这个图中的一个实体),对于一些在知识图谱中不存在的词(例如of),作者直接用一个特定的_Not_A_Fact_表示(如上图所示);然后,使用静态注意力机制获取检索到知识图谱的向量表示$g_{i}$,与词向量拼接得到最终的表示 $e(x_{t}) = [w(x_{t});g_{i}]$,输入到GRU。

Static Graph Attention
静态图注意力机制的目的是得到一个知识图谱的静态向量表示,由[Velickovicet al., 2017]首次提出,本文中使用的Static Graph Attention稍有区别,不同之处在于本文不仅仅考虑节点,同时考虑节点之间的关系。

对于给定的一个图 $K(g_{i}) = (k_{1}, k_{2}, …, k_{N_{g_{i}}})$,$g_{i}$ 表示给定的图,$k_{i}$ 表示图中的一个三元组。本文中使用的Static Graph Attention计算如下:

Attention机制用来衡量relation $\bold r_{n}$ 与 head entity $\bold h_{n}$ ,tail entity $\bold t_{n}$ 的关系。

Knowledge Aware Generator

Figure  4:  Knowledge  aware  generator  dynamically  attends  on  the graphs  (the  pink  graph  is  mostly  attended)  .  It  then  attentively  reads the  triples  in  each  graph  to  estimate  the  probability  of  selecting  a triple,  where  the  triple’s  neighboring  entity  (purple  dots/words)  is used  for  word  generation

Knowledge Aware Generator用来结合知识图谱生成对话回复,主要有以下两个作用:

  • 读取所有检索到的图,来获取一个图感知上下文向量,并用这个向量来更新解码器的状态。
  • 自适应地从检索到的图中,选择通用词汇或实体来生成词语。形式上来看,解码器通过如下过程来更新状态:

这里 $e(y_{t})$是单词向量$w(y_{t})$和前一个知识三元组向量$k_{j}$的结合,其来自上一个所选单词$y_{t}$。$c_{t}$是式 2 中的上下文向量,$c_{t}^{g}$和$c_{t}^{k}$分别是作用于知识图向量$G = (g_{1}, …,g_{N_{G}})$和知识三元组向量$K(g_{i}) = (k_{1}, k_{2}, …, k_{g_{N_{G}}})$(所有检索图中的所有三元组)的上下文向量。

_注意:作者在实验数据集部分中提到,若一对问答数据与任何三元组(即一个实体出现在问题中,另一个在答复中)都没有关联,那么这一对数据就会被剔除掉。也即作者假设问答对中必须至少包含一个三元组,三元组的一个实体在问题中,另一个在答案中,这样,答案中出现的实体一定在通过问题检索出来的知识图谱中,这是整个模型的前提。_

Dynamic Graph Attention
动态图注意力机制是一个分层的、自上而下的过程。首先,它读取所有的检索到的知识图(实际上是指输入问题检索到的知识图谱)和每个图中的所有三元组,用来生成最终的回复。若给定一个解码器的状态$s_{t}$, 它首先作用于知识图向量$(g_{1}, …,g_{N_{G}})$,以计算使用每个图的概率,如下:

接下来,该模型用每个图$g_{i}$中的知识三元组向量$K(g_{i}) = (k_{1}, k_{2}, …, k_{N_{g_{i}}})$,来计算选择某个三元组来生成答案的概率,过程如下:

最后,知识感知生成器选取通用词汇或实体词汇,基于如下概率分布:

这里$\gamma_{t} \in [0, 1]$ 是用来平衡实体词汇$w_{e}$和通用词汇$w_{c}$之间选择的标量,$P_{c}, P_{e}$分别是通用词汇和实体词汇的概率,最终的概率$P(y_{t})$由两种概率结合所得。

Experiments

Dataset

  1. Commonsense Knowledge Base : 本文使用语义网络 (ConceptNet) 作为常识知识库。语义网络不仅包括客观事实,如“巴黎是法国的首都”这样确凿的信息,也包括未成文但大家都知道的常识,如“狗是一种宠物”。这一点对实验很关键,因为在建立开放域对话系统过程中,能识别常见概念之间是否有未成文但真实存在的关联是必需的。
  2. Commonsense Conversation Dataset:使用了来自 reddit 上一问一答形式的对话数据,数据集大小约为 10M。由于本文的目标是用常识知识优化语言理解和生成,所以作者滤出带有知识三元组的原始语料数据。若一对问答数据与任何三元组(即一个实体出现在问题中,另一个在答复中)都没有关联,那么这一对数据就会被剔除掉。

Baselines

  • Seq2Seq,一种 seq2seq 模型,它被广泛应用于各种开放域对话系统中。

  • MemNet,一个基于知识的模型,其中记忆单元用来存储知识三元组经 TransE 嵌入处理后的数据。

  • CopyNet,一种拷贝网络模型,它会从知识三元组中拷贝单词或由词汇表生成单词。

Automatic Evaluation

指标:作者采用复杂度 (perplexity)来评估模型生成的内容。同时也计算了每条回复中的实体个数,来估量模型从常识知识库中挑选概念的能力,这项指标记为 entity score.

结果:如表 2 所示,CCM 获得了最低的复杂度,说明 CCM 可以更好地理解用户的问题,从而给出语义上更合理的回复。而且与其他模型相比,在对话生成中,CCM 从常识知识中选取的实体最多,这也可以说明常识知识可以在真正意义上优化回复的生成。

Table  2:  Automatic  evaluation  withperplexity(ppx.),  andentity  score(ent.)

Manual Evaluation

指标:作者定义了两项指标:appropriateness 在内容质量上进行评估(基于语法、主题和逻辑);informativeness 在知识层面进行评估(基于生成的答复是否针对问题提供了新的信息和知识)。

结果:如表 3 所示,CCM 在两项指标下都比另外几个模型表现更为突出。其中 CopyNet 是将知识三元组分开单独使用的,这也证明了图注意力机制的有效性。

很明显,在 OOV (out-of-vocabulary) 数据集的表现上, CCM 比 Seq2Seq 突出得多。这也进一步说明常识知识在理解生僻概念上很有效,而 Seq2Seq 并没有这个能力。对于 MemNet 和 CopyNet,未发现在这一点上的差别,是因为这两个模型都或多或少引入使用了常识知识。

enter image description herTable  3:  Manual  evaluation  withappropriateness(app.),andinformativeness(inf.).  The  score  is  the  percentage  that  CCM  wins  its  competitor after  removing  “Tie”  pairs.  CCM  is  significantly  better  (sign  test,  p-value<0:005)  than  all  the  baselines  on  all  the  test  sets.e

Conclusion and Future Work

在本文中,作者提出了一个常识知识感知对话模型 (CCM),演示了常识知识有助于开放域对话系统中语言的理解与生成。自动评估与人工评估皆证明了,与当前最先进的模型相比,CCM 能够生成更合理、信息量更丰富的回复。图注意力机制的表现,鼓舞了我们在未来的其他项目中也将使用常识知识。

Reference